home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / tools / condrv / cond_e12.lzh / xcont / xcont.s < prev   
Encoding:
Text File  |  1998-06-24  |  25.2 KB  |  1,513 lines

  1.         .title    Condrv.sys Manager XCONT
  2.  
  3. PROGRAM:    .reg    'xcont'
  4. VERSION:    .reg    '0.60'
  5. DATE:        .reg    '1998/06/25'
  6. AUTHOR:        .reg    'ùºë╘éªéΦÄq'
  7.  
  8.  
  9. #symbol
  10. #    __CRLF__    CRLFëⁿìsé≡Åoù═é╖éΘ(ûóÆΦï`Ä₧é═LFëⁿìs).
  11. #    __OLD_FUNC__    -xé╠âoâbâtâ@âèâôâOÆΓÄ~é═movemé≡rtsé╔Åæé½è╖éªéΘ.
  12. #            (ûóÆΦï`Ä₧é═âVâXâeâÇâRü[âï$24é≡Ägéñ).
  13. #    SLASH_CNV    Ä└ìsâtâ@âCâïîƒì⌡Ä₧é╔ '/' -> '\'
  14.  
  15.  
  16. * Include File -------------------------------- *
  17.  
  18.         .include    dos.mac
  19.         .include    macro.mac
  20.         .include    fefunc.mac
  21.         .include    console.mac
  22.         .include    doscall.mac
  23.         .include    iocscall.mac
  24.  
  25.  
  26. * âXâîâbâhè╟ù¥Åεò±é╠ì\æó ---------------------- *
  27.  
  28.         .offset    0
  29. BG_NextThread:    .ds.l    1
  30. BG_WaitFlag:    .ds.b    1
  31. BG_Count:    .ds.b    1
  32. BG_CountMax:    .ds.b    1
  33. BG_DosCmd:    .ds.b    1
  34. BG_PSP:        .ds.l    1
  35. BG_USP:        .ds.l    1
  36. BG_RegSave:    .ds.l    15
  37. BG_SR:        .ds    1
  38. BG_PC:        .ds.l    1
  39. BG_SSP:        .ds.l    1
  40. BG_InDosFlag:    .ds.w    1
  41. BG_InDosPtr:    .ds.l    1
  42. BG_Buffer:    .ds.l    1
  43. BG_Name:    .ds.b    16
  44. BG_WaitTime:    .ds.l    1
  45. *BG_MemoryTop:    .ds.l    1
  46. *BG_MemoryEnd:    .ds.l    1
  47. BG_SIZE:
  48.         .fail    $.ne.(124-8)
  49.  
  50.  
  51. * Fixed Number -------------------------------- *
  52.  
  53. ARG_BUF_SIZE:    .equ    32*1024
  54. STACK_SIZE:    .equ    8*1024
  55. EXEC_NAME_SIZE:    .equ    128
  56.  
  57. BG_USP_SIZE:    .equ    64+466
  58. BG_SSP_SIZE:    .equ    5*1024
  59.         .fail    STACK_SIZE<(BG_USP_SIZE+BG_SSP_SIZE)
  60.  
  61.         .offset    0
  62. syscall_adr:    .ds.l    1
  63. arg_buf_adr:    .ds.l    1
  64. exec_name:    .ds.b    EXEC_NAME_SIZE
  65. thread_buf:    .ds.b    BG_SIZE
  66.         .even
  67. priority:    .ds    1
  68.         .ds.b    STACK_SIZE
  69. stack_end:
  70. work_size:
  71.  
  72. STDIN_ATR:    .equ    $80c1
  73. STDOUT_ATR:    .equ    $80c2
  74. RTS_CODE:    .equ    $4e75
  75. MOVEM_CODE:    .equ    $48e7
  76.  
  77. *EXIT_SUCCESS:    .equ    0
  78. EXIT_NOCONDRV:    .equ    1
  79. EXIT_NOMEM:    .equ    2
  80. EXIT_ARGERR:    .equ    3
  81. EXIT_IOERR:    .equ    4
  82. EXIT_NOTSUPP:    .equ    5
  83. EXIT_STACKERR:    .equ    6
  84. EXIT_EXECERR:    .equ    7
  85. EXIT_KEEPERR:    .equ    8
  86. EXIT_BGERR:    .equ    9
  87.  
  88.  
  89. * CONDRV.SYS ôαòöì\æóé╠ÆΦï` ------------------- *
  90.  
  91. CONDRV_MARK:    .equ    'hmk*'
  92. bufstruct_size:    .equ    32
  93.  
  94.         .offset    -28
  95. option_flag:    .ds.b    1
  96.         .even
  97. wait_count:    .ds    1
  98. wait_init:    .ds    1
  99. syscall_adr_:    .ds.l    1
  100.         .ds.b    1            ;ûóÄgùp?
  101. winkey_flag:    .ds.b    1
  102. bufinp_addr:    .ds.l    1
  103. keybuf_len:    .ds.l    1
  104. keybuf_addr:    .ds.l    1
  105. condrv_mark:    .ds.l    1
  106.         .fail    *.ne.0
  107. key_init_entry:
  108.  
  109. option_f_bit:    .equ    0
  110. option_bg_bit:    .equ    1
  111. option_j_bit:    .equ    7
  112.  
  113. * âVâXâeâÇâRü[âï
  114. COND_ONOFF:    .equ    $0000
  115. COND_STACK:    .equ    $0023
  116. COND_LEVEL:    .equ    $0024
  117. COND_GETVER:    .equ    -1            ;$ffff
  118.  
  119.  
  120. * Text Section -------------------------------- *
  121.  
  122.         .cpu    68000
  123.  
  124.         .text
  125.         .even
  126.  
  127. **** ü½ é▒é▒é⌐éτÅφÆôòö ü½ ****
  128.  
  129. start_:
  130.         bra.s    @f
  131. hupair_mark:
  132.         .dc.b    '#HUPAIR',0
  133. @@:
  134.         bra    start_2
  135.  
  136. bg_start_0:
  137.         DOS    _CHANGE_PR
  138. bg_start:
  139.         move.b    (start_-$100+4,pc),d0
  140.         not.b    d0
  141.         bne    bg_start_0        ;ÅφÆôÅIù╣é╖éΘé▄é┼æ╥ï@
  142.  
  143.         lea    (bg_spsave,pc),a0
  144.         move.l    sp,(a0)
  145.  
  146.         pea    (bg_start_2,pc)
  147.         move    #_ERRJVC,-(sp)
  148.         DOS    _INTVCS
  149.         addq.l    #6,sp
  150. bg_start_2:
  151.         movea.l    (bg_spsave,pc),sp
  152.  
  153.         lea    (bg_com_id,pc),a0
  154.         moveq    #-1,d1
  155.         moveq    #0,d2
  156.         move    (bg_sleep_cnt,pc),d2
  157. bg_loop:
  158.         cmp    (a0),d1
  159.         beq    bg_keysns        ;Æ╩ÉMâfü[â^é╚é╡
  160.         move    (bg_com_cmd,pc),d0
  161.         move    d1,(a0)            ;Æ╩ÉMïûë┬
  162.  
  163.         cmpi    #THREAD_KILL,d0
  164.         bne    @f
  165.         DOS    _KILL_PR        ;Ä⌐î╚öjèⁿ
  166. *        bra    bg_keysns
  167. @@:
  168.         cmpi    #THREAD_SLEEP,d0
  169.         bne    bg_keysns
  170.         clr.l    -(sp)            ;ëiïvâXâèü[âv
  171.         DOS    _SLEEP_PR
  172.         addq.l    #4,sp
  173.         bra    bg_keysns
  174.  
  175. bg_keysns_input:
  176.         IOCS    _B_KEYINP        ;SHIFT/CTRL/OPT.1/2 é═ô╟é▌Ä╠é─éΘ
  177. bg_keysns:
  178.         IOCS    _B_KEYSNS
  179.         cmpi    #$7000,d0
  180.         bcc    bg_keysns_input
  181.  
  182.         move.l    d2,-(sp)        ;Äbé¡âXâèü[âvé╖éΘ
  183.         DOS    _SLEEP_PR
  184.         addq.l    #4,sp
  185.         bra    bg_loop
  186.  
  187. bg_combuf:
  188.         .dc.l    0            ;length
  189.         .dc.l    0            ;buffer address
  190. bg_com_cmd:    .dc    0            ;command no.
  191. bg_com_id:    .dc    -1            ;sender ID
  192.  
  193. bg_sleep_cnt:    .dc    50            ;0.05òb
  194.  
  195. bg_spsave:    .ds.l    1
  196.  
  197. **** ü¬ é▒é▒é▄é┼ÅφÆôòö(Ä└ìsâRü[âh) ü¬ ****
  198.  
  199.  
  200. * âXâîâbâhé≡ïNô«é╡é─é⌐éτÅφÆôÅIù╣é╖éΘé▄é┼é╠è╘üAbg_usp_bottomê╚ì~é═ïNô«
  201. * é╡é╜âXâîâbâhé╠âXâ^âbâNé╞é╡é─Ägùpé│éΩé─é╡é▄éóÄ└ìsÆåé╠âRü[âhé≡öjë≤é╡é─
  202. * é╡é▄éñï░éΩé¬éáéΘé╠é┼üAÅφÆôé╔òKùvé╚âïü[â`âôé═ÅφÆôòöé╠êΩòöé╞é╡é─ïLÅqé╖éΘ.
  203.  
  204.  
  205. * ÅφÆôÄ₧é╔Ägùpé╖éΘâTâuâïü[â`âô
  206.  
  207. * condrv(em).sysé╠BGâtâëâOé≡âZâbâg/âNâèâAé╖éΘ.
  208. * in    d0.l    0:âNâèâA 1:âZâbâg
  209. *    a0.l    get_condrv_worké╠ò╘Æl
  210.  
  211. bitchg_bg_flag:
  212.         PUSH    a0-a1
  213.         move.l    d0,-(sp)
  214.         lea    (option_flag,a0),a1
  215.         IOCS    _B_BPEEK
  216.  
  217.         move.b    d0,d1
  218.         moveq    #option_bg_bit,d0
  219.         bclr    d0,d1
  220.         tst.l    (sp)+
  221.         beq    @f            ;in.d0=0é╚éτâNâèâA
  222.         bset    d0,d1            ;     =1é╚éτâZâbâg
  223. @@:
  224.         subq.l    #1,a1
  225.         IOCS    _B_BPOKE
  226.         POP    a0-a1
  227.         rts
  228.  
  229. * ÅφÆôâïü[â`âô
  230.  
  231. openpr_and_keep:
  232.         bsr    print_title
  233.         pea    (keep_mes,pc)
  234.         DOS    _PRINT
  235.  
  236.         clr.l    (sp)            ;âüâéâèé≡æSé─ë≡ò·é╖éΘ
  237.         DOS    _MFREE
  238.  
  239.         pea    (100)            ;Åëè·âXâèü[âvÄ₧è╘0.1òb
  240.         pea    (bg_combuf,pc)        ;Æ╩ÉMâoâbâtâ@
  241.         pea    (bg_start,pc)        ;Åëè·pc
  242.         .if    0
  243.         clr    -(sp)            ;Åëè·sr
  244.         .else
  245.         move    #$2000,-(sp)        ;supervisor mode
  246.         .endif
  247.         pea    (bg_ssp_bottom,pc)    ;Åëè·ssp
  248.         pea    (bg_usp_bottom,pc)    ;Åëè·usp
  249.         move    (priority,a6),-(sp)    ;Ä└ìsùDɵâîâxâï
  250.         pea    (thread_name,pc)    ;âXâîâbâhû╝
  251.         DOS    _OPEN_PR
  252.         lea    (28,sp),sp
  253.         tst.l    d0
  254.         bmi    keep_error
  255.  
  256.         moveq    #1,d0
  257.         bsr    bitchg_bg_flag
  258.  
  259.         clr    -(sp)
  260.         pea    (bg_ssp_bottom-start_).w
  261.         DOS    _KEEPPR
  262.  
  263. bg_end:
  264.  
  265. bg_usp_bottom:    .equ    bg_end+BG_USP_SIZE
  266. bg_ssp_bottom:    .equ    bg_end+BG_USP_SIZE+BG_SSP_SIZE
  267.  
  268. **** ü¬ é▒é▒é▄é┼ÅφÆôòö ü¬ ****
  269.  
  270. start_2:
  271.         pea    (end_-start_+work_size+$f0)
  272.         pea    (16,a0)
  273.         DOS    _SETBLOCK
  274.         tst.l    d0
  275.         bmi    memory_error
  276.         lea    (end_,pc),a6
  277.         lea    (stack_end,a6),sp
  278.  
  279.         clr.l    (syscall_adr,a6)
  280.         bsr    get_condrv_work
  281.         bne    @f
  282.  
  283.         lea    (syscall_adr_,a1),a1
  284.         IOCS    _B_LPEEK
  285.         move.l    d0,(syscall_adr,a6)
  286. @@:
  287.         pea    (ARG_BUF_SIZE)        ê°Éöò£î│ùpâoâbâtâ@é≡èmò█é╖éΘ
  288.         move    #2,-(sp)        Åπê╩é⌐éτîƒì⌡
  289.         DOS    _MALLOC2
  290.         addq.l    #6,sp
  291.         move.l    d0,(arg_buf_adr,a6)
  292.         bmi    memory_error
  293.         movea.l    d0,a1
  294.  
  295.         tst.b    (a2)+
  296.         beq    @f
  297.         lea    (a2),a0
  298.         bsr    DecodeHUPAIR
  299.         move.l    d0,d7            ê°Éöé╠Éö
  300. @@:
  301.         beq    check_stdin_redirect
  302.  
  303.         subq    #1,d7
  304.         moveq    #0,d6            (ï≤é┼é╚éó)ê°Éöé¬êΩôxé┼éαéáé┴é╜é⌐
  305. arg_loop:
  306.         move.l    a1,-(sp)
  307.         lea    (a1),a0
  308.         move.b    (a0)+,d0
  309.         beq    next_arg_skip
  310.         cmpi.b    #'-',d0
  311.         beq    check_option
  312.  
  313.         lea    (command_list,pc),a2
  314.         moveq    #0,d1
  315. command_check_loop:
  316.         bsr    strcmp
  317.         bne    @f            êßéñ
  318.         tst.b    (a2)+
  319.         beq    command_found
  320. @@:
  321.         tst.b    (a2)+
  322.         bne    @b
  323.         addq    #2,d1
  324.         tst.b    (a2)
  325.         bne    command_check_loop
  326.         bra    argument_err
  327. command_found:
  328.         move    (@f,pc,d1.w),d1
  329.         jsr    (@f,pc,d1.w)
  330.         bra    next_arg
  331. @@:
  332.         .dc    command_on-@b
  333.         .dc    command_off-@b
  334.         .dc    command_x-@b
  335.         .dc    command_xon-@b
  336.         .dc    command_xoff-@b
  337.         .dc    command_k-@b
  338.         .dc    command_kon-@b
  339.         .dc    command_koff-@b
  340.         .dc    command_push-@b
  341.         .dc    command_pop-@b
  342.         .dc    command_check-@b
  343.         .dc    command_ver-@b
  344.  
  345. check_option:
  346.         move.b    (a0)+,d0
  347.         cmpi.b    #'-',d0
  348.         beq    check_long_option
  349. next_opt:    cmpi.b    #'?',d0
  350.         beq    print_usage
  351.         ori.b    #$20,d0
  352.         lea    (option_table,pc),a2
  353. @@:
  354.         move.l    (a2)+,d1
  355.         beq    argument_err
  356.         cmp.b    d0,d1
  357.         bne    @b
  358.         swap    d1
  359.         adda    d1,a2
  360.         jsr    (a2)
  361.         move.b    (a0)+,d0        âIâvâVâçâôé═æ▒é»é─éαéµéó
  362.         bne    next_opt
  363. next_arg:
  364.         moveq    #-1,d6
  365. next_arg_skip:
  366.         movea.l    (sp)+,a1
  367. @@:        tst.b    (a1)+            Äƒé╠ê°Éö
  368.         bne    @b
  369.         dbra    d7,arg_loop
  370.         tst    d6
  371.         bne    exit
  372.         bra    check_stdin_redirect
  373.  
  374. check_long_option:
  375.         move.b    (a0),d0
  376.         lea    (str_help,pc),a2
  377.         cmp.b    (a2),d0
  378.         seq    d0            ;$ff = --help
  379.         beq    @f
  380.         addq.l    #str_version-str_help,a2
  381. @@:
  382.         cmpm.b    (a2)+,(a0)+
  383.         bne    argument_err
  384.         tst.b    (-1,a0)
  385.         bne    @b
  386.         tst.b    d0
  387.         bne    option_h
  388.         bra    option_v
  389.  
  390.  
  391. * ê°ÉöÅ╚ù¬Ä₧ --------------------------------- *
  392.  
  393. check_stdin_redirect:
  394.         clr.l    -(sp)
  395.         DOS    _IOCTRL
  396.         addq.l    #4,sp
  397.         cmpi    #STDIN_ATR,d0
  398.         beq    print_onoff        STDINÉ╪éΦè╖éªé╚é╡
  399.  
  400.         lea    (stdin,pc),a0
  401.         bsr    option_l        É╪éΦè╖éªéτéΩé─éóé╜ÅΩìçé═ XCONT -L- é╞î⌐é╚é╖
  402. exit:        DOS    _EXIT
  403.  
  404. print_onoff:
  405.         tst.l    (syscall_adr,a6)    *
  406.         beq    print_off        * ûóÅφÆôÄ₧é═offé≡ò\Ī
  407.  
  408.         bsr    get_bufinp_addr
  409.         IOCS    _B_WPEEK
  410.         subi    #MOVEM_CODE,d0
  411. print_on_off:
  412.         lea    (on_mes,pc),a0
  413.         beq    print_a0_exit
  414. print_off:
  415.         lea    (off_mes,pc),a0
  416. print_a0_exit:
  417.         move.l    a0,-(sp)
  418. print_exit:    DOS    _PRINT
  419.         DOS    _EXIT
  420.  
  421. * âRâ}âôâh în --------------------------------- *
  422.  
  423. command_x:
  424.         move.l    (syscall_adr,a6),d0
  425.         beq    print_level        ;ûóÅφÆôÄ₧é═ 0 é≡ò\Ī
  426.  
  427.         moveq    #0,d1            ;ÆΓÄ~âîâxâïé╠Ä√ô╛
  428.         bsr    call_stop_level
  429. print_level:
  430.         lea    (buffer,pc),a0
  431.         pea    (a0)
  432.         FPACK    __LTOS            ;ò╢ÄÜù±é╔ò╧è╖
  433.         bra    print_line
  434.  
  435. command_k:
  436.         tst.l    (syscall_adr,a6)    *
  437.         beq    print_off        * ûóÅφÆôÄ₧é═offé≡ò\Ī
  438.  
  439.         bsr    get_condrv_work
  440.         moveq    #winkey_flag,d1
  441.         bsr    bpeek
  442.         tst.b    d0
  443.         bra    print_on_off
  444.  
  445. command_on:
  446.         move    #1,d1            ;ĵéΦì₧é▌èJÄn
  447.         bra    @f
  448. command_off:
  449.         move    #0,d1            ;ĵéΦì₧é▌ÆΓÄ~
  450. @@:        tst.l    (syscall_adr,a6)
  451.         beq    command_on_off_return    ;ûóÅφÆôÄ₧é═ë╜éαé╡é╚éó
  452.  
  453.         moveq    #COND_ONOFF,d1
  454.         bsr    call_sys_call
  455.         bra    conctrl_fncmod
  456.  
  457. command_kon:
  458.         moveq    #0,d2
  459.         bra    @f
  460. command_koff:
  461.         moveq    #-1,d2
  462. @@:
  463.         tst.l    (syscall_adr,a6)    *
  464.         beq    command_on_off_return    * ûóÅφÆôÄ₧é═ë╜éαé╡é╚éó
  465.  
  466.         bsr    get_condrv_work
  467.         lea    (winkey_flag,a0),a1
  468.         move    d2,d1
  469.         IOCS    _B_BPOKE
  470. command_on_off_return:
  471.         rts
  472.  
  473. command_check:
  474.         clr    -(sp)
  475.         bsr    get_condrv_work
  476.         beq    @f
  477.         addq    #1,(sp)
  478. @@:
  479.         DOS    _EXIT2
  480.  
  481. command_ver:
  482.         tst.l    (syscall_adr,a6)    *
  483.         beq    condrv_err        * ægé▌ì₧é▄éΩé─éóé╚é»éΩé╬âGâëü[
  484.  
  485.         bsr    get_cond_ver
  486.         lea    (ver_print_buf,pc),a0
  487.         move.l    d0,(a0)
  488.         bmi    condrv_err2
  489.         bra    print_a0_exit
  490.  
  491. command_push:
  492.         moveq    #1,d1
  493.         bra    @f
  494. command_pop:
  495.         pea    (conctrl_fncmod,pc)    POPÄ₧é═âVâXâeâÇâXâeü[â^âXé≡Åæé½Æ╝é╖
  496.         moveq    #0,d1
  497. @@:
  498.         tst.l    (syscall_adr,a6)    *
  499.         beq    @f            * ûóÅφÆôÄ₧é═ë╜éαé╡é╚éó
  500.  
  501.         moveq    #COND_STACK,d0
  502.         bsr    call_sys_call
  503.         tst.l    d0
  504.         bmi    stack_error
  505. @@:
  506.         rts
  507.  
  508. * âIâvâVâçâô --------------------------------- *
  509.  
  510. option_table:
  511.         .irpc    %a,hvfjlxzr
  512.         .dc    (option_%a-$-4),'&%a'
  513.         .endm
  514.         .dc.l    0
  515.  
  516. str_help:    .dc.b    'help',0
  517. str_version:    .dc.b    'version',0
  518.         .even
  519.  
  520. option_h:
  521. print_usage:
  522.         bsr    print_title
  523.         pea    (usage_mes,pc)
  524.         bra    print_exit
  525.  
  526. option_v:
  527.         pea    (version_mes,pc)
  528.         lea    (version_mes_end,pc),a0
  529.         bra    print_line
  530.  
  531. * ûûö÷é╔ CRLF é≡òtë┴é╡é─ò\Ī.
  532. * in    (sp).l    ò╢ÄÜù±é╠ɵô¬âAâhâîâX
  533. *    a0.l    ûûö÷
  534.  
  535. print_line:
  536.     .ifdef    __CRLF__
  537.         move.b    #CR,(a0)+
  538.     .endif
  539.         move.b    #LF,(a0)+
  540.         clr.b    (a0)
  541.         bra    print_exit
  542.  
  543. option_f:
  544.         pea    (conctrl_fncmod,pc)
  545.         moveq    #1.shl.option_f_bit,d2
  546.         bra    @f
  547. option_j:
  548.         moveq    #1.shl.option_j_bit,d2
  549. @@:
  550.         moveq    #1,d1
  551.         bsr    is_number
  552.         bmi    @f            ;ÉöÆlÅ╚ù¬Ä₧é═1
  553.         bsr    get_value
  554. @@:        subq.l    #1,d1
  555.         bhi    over_val_err
  556.         seq    d3            d3=-1:$.or.d2 d3=0:($.or.d2).eor.d2
  557.  
  558.         tst.l    (syscall_adr,a6)    *
  559.         beq    option_fj_return    * ûóÅφÆôÄ₧é═ë╜éαé╡é╚éó
  560.  
  561.         move.l    a0,-(sp)
  562.         bsr    get_condrv_work
  563.         lea    (option_flag,a0),a1
  564.         IOCS    _B_BPEEK
  565.         movea.l    (sp)+,a0
  566.  
  567.         or.b    d2,d0
  568.         tst.b    d3
  569.         bmi    @f
  570.         eor.b    d2,d0
  571. @@:
  572.         move.b    d0,d1
  573.         subq.l    #1,a1
  574.         IOCS    _B_BPOKE
  575. option_fj_return:
  576.         rts
  577.  
  578. option_l:
  579.         bsr    check_filearg
  580.  
  581.         moveq    #STDIN,d5
  582.         move.b    (a0),-(sp)
  583.         move    (sp)+,d0
  584.         move.b    (1,a0),d0
  585.         cmp    (stdin,pc),d0
  586.         beq    @f            -L - é╠ÅΩìçé═òWÅÇôⁿù═é⌐éτô╟é▐
  587.  
  588.         clr    -(sp)
  589.         move.l    a0,-(sp)
  590.         DOS    _OPEN
  591.         addq.l    #6,sp
  592.         move.l    d0,d5
  593.         bmi    fopen_error
  594. @@:
  595.         moveq    #0,d2            d2=-1:òWÅÇôⁿù═âfâoâCâX
  596.  
  597.         move    d5,-(sp)
  598.         clr    -(sp)
  599.         DOS    _IOCTRL
  600.         tst.l    d0
  601.         bmi    ioctrl_error
  602.         tst.b    d0
  603.         bpl    @f            âuâìâbâNâfâoâCâXÅπé╠âtâ@âCâïé═ 0 é¬ò╘éΘ
  604.  
  605.         ori.b    #%0111_1110,d0
  606.         addq.b    #1,d0
  607.         seq    d2            CharDev&&STDINé┼CONé⌐éτé╠ôⁿù═é╞é▌é╚é╖
  608.  
  609.         addq    #6,(sp)
  610.         DOS    _IOCTRL
  611.         tst.l    d0            -1.l é┼ôⁿù═ë┬
  612.         beq    cannot_input_error    ôⁿù═òsë┬é╠âLâââëâNâ^âfâoâCâX
  613. @@:
  614.         addq.l    #4,sp
  615.  
  616.         tst.l    (syscall_adr,a6)    *
  617.         beq    end_of_file        * ûóÅφÆôÄ₧é═ôⁿù═âtâ@âCâïé╠â`âFâbâNé╛é»é╖éΘ
  618.  
  619.         moveq    #-1,d4
  620.         lsr.l    #8,d4
  621.         move.l    d4,-(sp)
  622.         DOS    _MALLOC
  623.         and.l    d0,d4
  624.         lsr.l    #1,d4            æSâtâèü[âüâéâèé╠ö╝ò¬é≡èmò█
  625.         move.l    d4,(sp)
  626.         DOS    _MALLOC
  627.         addq.l    #4,sp
  628.         tst.l    d0
  629.         bmi    memory_error
  630.         movea.l    d0,a5
  631.  
  632. *XCON é≡âIü[âvâôé╖éΘ
  633.         move    #WOPEN,-(sp)
  634.         pea    (xcon,pc)
  635.         DOS    _OPEN
  636.         addq.l    #6,sp
  637.         tst.l    d0
  638.         bmi    xcon_open_error
  639.         swap    d5
  640.         move    d0,d5            d5:file|XCON
  641.  
  642.         move    d5,-(sp)
  643.         clr    -(sp)
  644.         DOS    _IOCTRL
  645.         tst.l    d0
  646.         bmi    xcon_ioctrl_error
  647.         tst.b    d0
  648.         bpl    xcon_char_open_error    òüÆ╩é╠âtâ@âCâïé≡âIü[âvâôé╡é─é╡é▄é┴é╜
  649.  
  650.         addq    #7,(sp)
  651.         DOS    _IOCTRL
  652.         addq.l    #4,sp
  653.         tst.l    d0            -1.l é┼Åoù═ë┬
  654.         beq    cannot_output_error
  655.  
  656. * òWÅÇÅoù═é¬É╪éΦè╖éªéτéΩé─éóéΘé⌐Æ▓é╫éΘ
  657.         moveq    #0,d3            d3.hw=0:É╪éΦè╖éªé╚é╡
  658.         pea    (STDOUT)        $0000_0001
  659.         DOS    _IOCTRL
  660.         addq.l    #4,sp
  661.         cmpi    #STDOUT_ATR,d0
  662.         beq    @f
  663.         moveq    #-1,d3            d3.hw=-1:éáéΦ(ù╝ò√é╔Åæé½ì₧é▐)
  664. @@:
  665. read_write_loop:
  666.         swap    d5            XCON|file
  667.         move.l    d4,-(sp)
  668.         move.l    a5,-(sp)
  669.         move    d5,-(sp)
  670.         DOS    _READ
  671.         lea    (10,sp),sp
  672.         tst.l    d0
  673.         bmi    fread_error
  674.         beq    end_of_file
  675.  
  676. * òWÅÇôⁿù═é⌐éτé╠ÅΩìçé═eofé≡Æ▓é╫éΘ
  677.         tst.b    d2
  678.         beq    write_stdout
  679.         lea    (a5),a2
  680.         subq.l    #1,d0
  681. @@:
  682.         move.b    (a2)+,d1
  683.         cmpi.b    #$04,d1            ^D
  684.         beq    eof_found
  685.         cmpi.b    #EOF,d1
  686.         beq    eof_found
  687.         dbra    d0,@b
  688.         clr    d0
  689.         subq.l    #1,d0
  690.         bcc    @b
  691.         bra    @f
  692. eof_found:
  693.         moveq    #-1,d2
  694. @@:
  695.         move.l    a2,d0
  696.         subq.l    #1,d0
  697.         sub.l    a5,d0
  698.         beq    end_of_file        ìsô¬é╔eofé¬éáé┴é╜ÅΩìç
  699.  
  700. write_stdout:
  701.         move.l    d0,-(sp)
  702.         move.l    a5,-(sp)
  703.         move    #STDOUT,-(sp)
  704.         tst.l    d3
  705.         bpl    @f
  706.         DOS    _WRITE
  707. @@:
  708. * XCON é╔Åæé½ì₧é▐
  709.         swap    d5            file|XCON
  710.         move    d5,(sp)
  711.         DOS    _WRITE
  712.         lea    (10,sp),sp
  713.  
  714.         tst    d2            eofé≡îƒÅoé╡é╜é⌐
  715.         bpl    read_write_loop
  716. * îπò╨òt
  717. end_of_file:
  718.         DOS    _ALLCLOSE
  719. @@:        tst.b    (a0)+            ìíé╠ê°Éöé═ì┼îπé▄é┼âtâ@âCâïû╝é╚é╠é┼
  720.         bne    @b            û▀é┴é─é⌐éτë≡Ä▀é│éΩé╚éóéµéñé╔é╖éΘ
  721.         subq.l    #1,a0
  722.         rts
  723.  
  724. option_x:
  725.         bsr    check_filearg
  726.  
  727.         pea    (ARG_BUF_SIZE+8)
  728.         DOS    _MALLOC
  729.         move.l    (sp)+,d6        size of ARG_BUF
  730.         tst.l    d0
  731.         bmi    memory_error
  732.         movea.l    d0,a3
  733.         lea    (8,a3),a4        #HUPAIR\0é╠ò¬
  734.         subq.l    #8,d6            üV
  735.  
  736.         lea    (a0),a1
  737.         lea    (exec_name,a6),a5
  738.         lea    (a5),a0
  739.         moveq    #EXEC_NAME_SIZE-1,d0
  740. @@:
  741.         move.b    (a1)+,(a0)+
  742.         dbeq    d0,@b
  743.         bne    too_long_filename_error
  744.  
  745.         clr.l    -(sp)            è┬ï½
  746.         move.l    a4,-(sp)        â_â~ü[é╠âRâ}âôâhâëâCâôâoâbâtâ@
  747.         move.l    a5,-(sp)        âtâ@âCâïû╝
  748.         move    #EXEC_PATHCHK,-(sp)    îƒì⌡
  749.         DOS    _EXEC
  750.         .ifndef    SLASH_CNV
  751.         tst.l    d0
  752.         lea    (14,sp),sp
  753.         bmi    load_error
  754.         .else
  755.         move.l    d0,d1
  756.         bpl    exec_load_ok
  757.  
  758. * SLASH é≡ BACKSLASH é╔ò╧éªé─ÄÄé╡é─é▌éΘ
  759.         lea    (a5),a0
  760. *        moveq    #-1,d1
  761. @@:
  762.         move.b    (a0)+,d0
  763.         beq    @f
  764.         cmpi.b    #'/',d0
  765.         bne    @b
  766.         moveq    #'\',d1
  767.         move.b    d1,(-1,a0)
  768.         bra    @b
  769. @@:
  770.         tst    d1
  771.         bmi    @f            ;'/'é═ûóÄgùpé╛é┴é╜
  772.  
  773.         DOS    _EXEC
  774.         tst.l    d0
  775.         bpl    exec_load_ok
  776. @@:
  777.         lea    (14,sp),sp
  778.         move.l    d1,d0            ìíôxéαâGâëü[é╚éτæOë±é╠ò╘Ælé≡Ägéñ
  779.         bra    load_error
  780. exec_load_ok:
  781.         lea    (14,sp),sp
  782.         .endif    /* SLASH_CNV */
  783.  
  784.         move.l    d6,d0            âoâbâtâ@ùeù╩
  785.         move.l    d7,d1
  786. *        addq.l    #1,d1            ê°Éöé╠Éö(a1=ê°Éöù±)
  787.         lea    (a4),a0            âoâbâtâ@ɵô¬
  788.         bsr    EncodeHUPAIR
  789.         bmi    memory_error        *
  790.  
  791.         move.l    d6,d1            âoâbâtâ@ùeù╩
  792.         lea    (a4),a1            âoâbâtâ@ɵô¬
  793.         lea    (a5),a2            arg0(filename)
  794.         bsr    SetHUPAIR
  795.         bmi    memory_error        *
  796.  
  797.         suba.l    a3,a0            ê°ÉöâGâôâRü[âhâoâbâtâ@é≡
  798.         move.l    a0,-(sp)        òKùvé╚ò¬é╛é»é╠æσé½é│é╔é╖éΘ
  799.         move.l    a3,-(sp)
  800.         DOS    _SETBLOCK
  801.  
  802.         move.l    (arg_buf_adr,a6),(sp)    òsùvé╔é╚é┴é╜ê°Éöò£î│âoâbâtâ@é≡ë≡ò·é╖éΘ
  803.         DOS    _MFREE
  804.         addq.l    #8,sp
  805.  
  806.         clr.l    -(sp)            è┬ï½
  807.         move.l    a4,-(sp)        âRâ}âôâhâëâCâô
  808.         move.l    a5,-(sp)        âtâ@âCâïû╝
  809.         move    #EXEC_LOAD,-(sp)    âìü[âhé╠é▌
  810.         DOS    _EXEC
  811.         lea    (14,sp),sp
  812.         move.l    d0,d6
  813.         bmi    load_error
  814.  
  815.         tst.l    (syscall_adr,a6)
  816.         beq    @f
  817.  
  818.     .ifdef    __OLD_FUNC__
  819.         bsr    get_bufinp_addr        *
  820.         IOCS    _B_WPEEK        * î╗ì▌é╠âéü[âhé≡ô╛éΘ
  821.         move    d0,d7
  822.  
  823.         bsr    command_off        * ÄµéΦì₧é▌é≡ÆΓÄ~é╖éΘ
  824.     .else
  825.         bsr    command_xoff        ;stop_level++
  826.         move.l    d0,d7
  827.     .endif
  828. @@:
  829.         move.l    d7,-(sp)
  830.         move.l    a6,-(sp)
  831.  
  832.         move.l    d6,-(sp)        * exec address
  833.         move    #4,-(sp)
  834.         DOS    _EXEC
  835.         addq.l    #6,sp
  836.  
  837.         move.l    (sp)+,a6
  838.         move.l    (sp)+,d7
  839.         move    d0,-(sp)        ;exit2é╠ê°Éö
  840.  
  841.         tst.l    (syscall_adr,a6)
  842.         beq    @f
  843.  
  844.     .ifdef    __OLD_FUNC__
  845.         bsr    get_bufinp_addr        *
  846.         move    d7,d1            * ê╚æOé╠âéü[âhé╔û▀é╖
  847.         IOCS    _B_WPOKE        *
  848.         bsr    conctrl_fncmod
  849.     .else
  850.         tst.l    d7
  851.         bmi    @f
  852.         bsr    command_xon        ;stop_level--
  853.     .endif
  854. @@:
  855.         DOS    _EXIT2
  856.  
  857.  
  858. * BGæ╬ë₧Åêù¥ --------------------------------- *
  859.  
  860. option_z:
  861.         moveq    #2,d1
  862.         bsr    is_number
  863.         bmi    @f
  864.         bsr    get_value        ;ùDɵôxé╠Ä√ô╛
  865. *        cmpi    #2,d1
  866. *        bcs    small_val_err
  867.         cmpi    #255,d1
  868.         bhi    over_val_err
  869. @@:        move    d1,(priority,a6)
  870.  
  871.         cmpi.b    #',',(a0)
  872.         bne    @f
  873.         addq.l    #1,a0
  874. *        bsr    is_number
  875. *        bmi    @f
  876.         bsr    get_value        ;âXâèü[âvÄ₧è╘é╠Ä√ô╛
  877.         tst    d1
  878.         beq    small_val_err
  879.         lea    (bg_sleep_cnt,pc),a1
  880.         move    d1,(a1)
  881. @@:
  882.         bsr    check_condrv
  883.         bsr    get_condrv_work
  884.         bra    openpr_and_keep
  885.  
  886. * condrv(em).sysé¬ægé▌ì₧é▄éΩé─éóéΘé⌐Æ▓é╫éΘ.
  887. * ægé▌ì₧é▄éΩé─éóé╚é»éΩé╬üAâGâëü[ÅIù╣é╖éΘ.
  888.  
  889. check_condrv:
  890.         tst.l    (syscall_adr,a6)
  891.         beq    condrv_err
  892.         bsr    get_cond_ver
  893.         tst.l    d0
  894.         bmi    condrv_err2
  895.         rts
  896.  
  897. option_r:
  898.         bsr    check_condrv
  899.  
  900.         lea    (thread_name,pc),a0
  901.         lea    (thread_buf+BG_Name,a6),a1
  902.         STRCPY    a0,a1
  903.  
  904.         pea    (thread_buf,a6)        ;ÄwÆΦâXâîâbâhû╝é╠âXâîâbâhö╘ìåé≡Ä√ô╛é╖éΘ
  905.         move    #-1,-(sp)
  906.         DOS    _GET_PR
  907.         move.l    d0,d1
  908.         bmi    release_error
  909.  
  910.         subq    #1,(sp)            ;Ä⌐ò¬é╠âXâîâbâhö╘ìåé≡Ä√ô╛é╖éΘ
  911.         DOS    _GET_PR
  912.         addq.l    #6,sp
  913.  
  914.         clr.l    -(sp)            ;ĵéΦè╕éªé╕ïNé▒é╖
  915.         clr.l    -(sp)
  916.         move    #THREAD_WAKEUP,-(sp)
  917.         move    d1,-(sp)
  918.         move    d0,-(sp)
  919.         DOS    _SEND_PR
  920.  
  921.         move    #THREAD_KILL,(4,sp)
  922.         moveq    #DOSE_CANTSEND,d2
  923.         bra    send_pr
  924. send_pr_loop:
  925.         DOS    _CHANGE_PR
  926. send_pr:
  927.         DOS    _SEND_PR        ;Ä≤é»òté»éτéΩéΘé▄é┼
  928.         cmp.l    d2,d0            ;öjèⁿùvïüé≡îJéΦò╘é╖
  929.         beq    send_pr_loop
  930.         tst.l    d0
  931.         lea    (14,sp),sp
  932.         bmi    release_error2
  933.  
  934.         pea    (thread_buf,a6)
  935.         move    d1,-(sp)
  936. get_pr_loop:
  937.         DOS    _CHANGE_PR        ;öjèⁿé│éΩéΘé╠é≡èmöFé╖éΘ
  938.         DOS    _GET_PR
  939.         tst.l    d0
  940.         bpl    get_pr_loop
  941.         addq.l    #6,sp
  942.  
  943.         bsr    get_condrv_work
  944.         moveq    #0,d0
  945.         bsr    bitchg_bg_flag
  946.  
  947.         bsr    print_title
  948.         pea    (release_mes,pc)
  949.         DOS    _PRINT
  950.         DOS    _EXIT
  951.  
  952.  
  953. * Sub ---------------------------------------- *
  954.  
  955. conctrl_fncmod:
  956.         move.l    #$000e_ffff,-(sp)
  957.         DOS    _CONCTRL
  958.         addq.l    #4,sp
  959.         rts
  960.  
  961. print_title:
  962.         pea    (title_mes,pc)
  963.         DOS    _PRINT
  964.         addq.l    #4,sp
  965.         rts
  966.  
  967. check_filearg:
  968.         tst.b    (a0)+
  969.         bne    @f
  970.  
  971.         dbra    d7,check_filearg
  972.         bra    no_filename_error
  973. @@:
  974.         subq.l    #1,a0
  975.         movea.l    a0,a1
  976.         rts
  977.  
  978. get_condrv_work:
  979.         move    #$100+_KEY_INIT,-(sp)
  980.         DOS    _INTVCG
  981.         addq.l    #2,sp
  982.         movea.l    d0,a0
  983.         moveq    #condrv_mark,d1
  984.         bsr    lpeek
  985.         cmpi.l    #CONDRV_MARK,d0
  986.         rts
  987.  
  988. get_bufinp_addr:
  989.         bsr    get_condrv_work
  990.         moveq    #bufinp_addr,d1
  991.         bsr    lpeek
  992.         movea.l    d0,a1
  993.         rts
  994.  
  995. lpeek:
  996.         moveq    #_B_LPEEK,d0
  997.         bra    @f
  998. bpeek:
  999.         moveq    #_B_BPEEK,d0
  1000. @@:        lea    (a0,d1.l),a1
  1001.         trap    #15
  1002.         rts
  1003.  
  1004. get_value:
  1005.         moveq    #0,d1
  1006.         bra    get_value_start
  1007. get_value_loop:
  1008.         moveq    #$f,d0
  1009.         and.b    (a0)+,d0
  1010.         mulu    #10,d1
  1011.         add.l    d0,d1
  1012. get_value_start:
  1013.         bsr    is_number
  1014.         bpl    get_value_loop
  1015.         rts
  1016.  
  1017. is_number:
  1018.         cmpi.b    #'0',(a0)
  1019.         bcs    @f
  1020.         cmpi.b    #'9',(a0)
  1021.         bhi    @f
  1022.         moveq    #0,d0
  1023.         rts
  1024. @@:        moveq    #-1,d0
  1025.         rts
  1026.  
  1027. strcmp:
  1028.         PUSH    d1/a1
  1029. @@:
  1030.         move.b    (a1)+,d0
  1031.         beq    @f
  1032.         ori.b    #$20,d0
  1033.         move.b    (a2)+,d1
  1034.         beq    strcmp_not_equ
  1035.         cmp.b    d0,d1
  1036.         beq    @b
  1037. @@:
  1038.         POP    d1/a1
  1039.         rts
  1040. strcmp_not_equ:
  1041.         subq.l    #1,a2
  1042.         moveq    #-1,d1
  1043.         bra    @b
  1044.  
  1045. get_cond_ver:
  1046.         moveq    #COND_GETVER,d0
  1047.         bra    call_sys_call
  1048.  
  1049. command_xoff:
  1050.         moveq    #+1,d1            ;stop_level++
  1051.         bra    call_stop_level
  1052. command_xon:
  1053.         moveq    #-1,d1            ;stop_level--
  1054. call_stop_level:
  1055.         moveq    #COND_LEVEL,d0
  1056.         bra    call_sys_call
  1057.  
  1058. call_sys_call:
  1059.         move.l    (syscall_adr,a6),-(sp)
  1060.         DOS    _SUPER_JSR
  1061.         addq.l    #4,sp
  1062.         rts
  1063.  
  1064.  
  1065. * âGâëü[Åêù¥ --------------------------------- *
  1066. ; exit(1):CONDRV.SYS é¬ægé▌ì₧é▄éΩé─éóé╚éó
  1067. ; exit(2):ôαòöâGâëü[
  1068. ; exit(3):ê°Éöé¬ê┘Åφ
  1069. ; exit(4):âtâ@âCâïâAâNâZâXé╔Ä╕ösé╡é╜(è▄é▐XCON)
  1070. ; exit(5):CONDRV.SYS é═ÅâÉ│òié┼éáéΘ
  1071. ; exit(6):âXâ^âbâNæÇì∞é╠âGâëü[
  1072. ; exit(7):âtâ@âCâïé╠Ä└ìsé╔Ä╕ösé╡é╜
  1073. ; exit(8):xconté═è∙é╔ÅφÆôé╡é─éóéΘ/é▄é╛ÅφÆôé╡é─éóé╚éó
  1074. ; exit(9):BGâvâìâZâXé¬ôoÿ^Åoùêé╚éó
  1075.  
  1076. condrv_err:
  1077.         lea    (condrv_err_mes,pc),a0
  1078.         moveq    #EXIT_NOCONDRV,d1
  1079.         bra    1f
  1080. condrv_err2:
  1081.         lea    (condrv_err_mes2,pc),a0
  1082.         moveq    #EXIT_NOTSUPP,d1
  1083.         bra    1f
  1084.  
  1085. memory_error:
  1086.         lea    (mem_err_mes,pc),a0
  1087.         moveq    #EXIT_NOMEM,d1
  1088.         bra    1f
  1089.  
  1090. stack_error:
  1091.         addq.l    #1,d0
  1092.         beq    condrv_err2        d0.l=-1
  1093.         lea    (push_err_mes,pc),a0
  1094.         tst    d2
  1095.         bne    @f
  1096.         lea    (pop_err_mes,pc),a0
  1097. @@:
  1098.         moveq    #EXIT_STACKERR,d1
  1099.         bra    1f
  1100. 1:
  1101.         suba.l    a1,a1
  1102.         bra    error_exit
  1103.  
  1104. argument_err:
  1105.         lea    (arg_err_mes,pc),a0
  1106.         bra    @f
  1107. over_val_err:
  1108.         lea    (val_err_mes,pc),a0
  1109.         bra    @f
  1110. small_val_err:
  1111.         lea    (val_err_mes,pc),a0
  1112.         move.l    #'żé│',(6,a0)
  1113.         bra    @f
  1114. no_filename_error:
  1115.         lea    (nofilename_err_mes,pc),a0
  1116.         bra    @f
  1117. too_long_filename_error:
  1118.         lea    (too_long_filename_mes,pc),a0
  1119.         movea.l    (sp)+,a1
  1120.         bra    @f
  1121. @@:
  1122.         moveq    #EXIT_ARGERR,d1
  1123.         bra    error_exit
  1124.  
  1125. xcon_char_open_error:
  1126.         lea    (xcon_open_err_mes,pc),a0
  1127.         bra    @f
  1128. cannot_output_error:
  1129.         lea    (cant_out_err_mes,pc),a0
  1130.         move    #'Åo',(a0)
  1131.         bra    @f
  1132. @@:
  1133.         lea    (xcon,pc),a1
  1134.         bra    1f
  1135.  
  1136. xcon_open_error:
  1137.         bsr    get_condrv_work        CONDRV.SYS é¬ægé▌ì₧é▄éΩé─éóé╚ÅΩìçé═
  1138.         lea    (xcon,pc),a1        âGâëü[âüâbâZü[âWéαò╧éªéΘ
  1139. fopen_error:
  1140.         lea    (fopen_mes_tbl,pc),a0
  1141.         move.b    d0,(fopen_err_mes-fopen_mes_tbl,a0)
  1142. check_open_err:
  1143.         cmp.b    (a0)+,d0
  1144.         beq    1f
  1145. @@:        tst.b    (a0)+
  1146.         bne    @b
  1147.         bra    check_open_err
  1148. xcon_ioctrl_error:
  1149.         lea    (xcon,pc),a1
  1150. ioctrl_error:
  1151.         lea    (ioctrl_err_mes,pc),a0
  1152.         bra    1f
  1153. cannot_input_error:
  1154.         lea    (cant_inp_err_mes,pc),a0
  1155.         bra    1f
  1156. fread_error:
  1157.         lea    (fread_err_mes,pc),a0
  1158.         bra    1f
  1159. 1:
  1160.         moveq    #EXIT_IOERR,d1
  1161.         bra    error_exit
  1162.  
  1163. load_error:
  1164.         lea    (load_err_mes,pc),a0
  1165.         lea    (a5),a1
  1166.  
  1167.         moveq    #EXIT_EXECERR,d1
  1168.         bra    error_exit
  1169.  
  1170. keep_error:
  1171.         moveq    #EXIT_KEEPERR,d1
  1172.         moveq    #DOSE_DUPTHNAM,d2    ;è∙é╔ÅφÆôé╡é─éóéΘ
  1173.         lea    (already_keep_mes,pc),a0
  1174.         cmp.l    d2,d0
  1175.         beq    @f
  1176.  
  1177.         moveq    #EXIT_BGERR,d1
  1178.         moveq    #DOSE_THFULL,d2        ;âXâîâbâhé¬êΩöt
  1179.         lea    (thread_full_mes,pc),a0
  1180.         cmp.l    d2,d0
  1181.         beq    @f
  1182.  
  1183. *        moveq    #EXIT_BGERR,d1        ;processûóÉ▌ÆΦ
  1184.         lea    (proccess_err_mes,pc),a0
  1185.         bra    @f
  1186. release_error:
  1187.         lea    (not_keep_mes,pc),a0
  1188.         moveq    #EXIT_KEEPERR,d1
  1189.         bra    @f
  1190. release_error2:
  1191.         lea    (release_err_mes,pc),a0
  1192.         moveq    #EXIT_BGERR,d1
  1193. @@:
  1194.         suba.l    a1,a1
  1195.         bra    error_exit
  1196.  
  1197. error_exit:
  1198.         move    #STDERR,-(sp)
  1199.         pea    (xcont_mes,pc)
  1200.         DOS    _FPUTS            XCONT:
  1201.         move.l    a0,(sp)
  1202.         DOS    _FPUTS            âGâëü[âüâbâZü[âW
  1203.         move.l    a1,(sp)
  1204.         beq    @f
  1205.         DOS    _FPUTS            ê°Éö
  1206. @@:        addq.l    #4,sp
  1207.         pea    (crlf,pc)
  1208.         DOS    _FPUTS            ëⁿìs
  1209.         move    d1,(sp)
  1210.         DOS    _EXIT2
  1211.  
  1212.  
  1213. * HUPAIR Encoder/Decoder ---------------------- *
  1214.  
  1215. DecodeHUPAIR:
  1216.         PUSH    d1-d2/a1
  1217.         moveq    #0,d0
  1218.         moveq    #0,d2
  1219. 1:
  1220.         move.b    (a0)+,d1
  1221.         beq    8f
  1222.         cmpi.b    #SPACE,d1
  1223.         beq    1b
  1224.  
  1225.         addq.l    #1,d0
  1226. 2:
  1227.         tst.b    d2
  1228.         beq    4f
  1229.  
  1230.         cmp.b    d2,d1
  1231.         bne    5f
  1232. 3:
  1233.         eor.b    d1,d2
  1234.         bra    6f
  1235. 4:
  1236.         cmpi.b    #'"',d1
  1237.         beq    3b
  1238.         cmpi.b    #"'",d1
  1239.         beq    3b
  1240.  
  1241.         cmpi.b    #SPACE,d1
  1242.         beq    7f
  1243. 5:
  1244.         move.b    d1,(a1)+
  1245.         beq    8f
  1246. 6:
  1247.         move.b    (a0)+,d1
  1248.         bra    2b
  1249. 7:
  1250.         clr.b    (a1)+
  1251.         bra    1b
  1252. 8:
  1253.         POP    d1-d2/a1
  1254.         tst.l    d0
  1255.         rts
  1256.  
  1257. EncodeHUPAIR:
  1258.         PUSH    d1-d3/a1-a2
  1259.         move.l    d0,d2
  1260.         bmi    2f
  1261. 1:
  1262.         subq.l    #1,d1
  1263.         bcc    3f
  1264. 2:
  1265.         move.l    d2,d0
  1266.         POP    d1-d3/a1-a2
  1267.         rts
  1268. 3:
  1269.         subq.l    #1,d2
  1270.         bmi    2b
  1271.  
  1272.         move.b    #SPACE,(a0)+
  1273.         move.b    (a1),d0
  1274.         beq    5f
  1275. 3:
  1276.         movea.l    a1,a2
  1277.         sf    d3
  1278. 4:
  1279.         move.b    (a2)+,d0
  1280.         beq    4f
  1281.  
  1282.         cmpi.b    #'"',d0
  1283.         beq    5f
  1284.         cmpi.b    #"'",d0
  1285.         beq    5f
  1286.  
  1287.         cmpi.b    #SPACE,d0
  1288.         bne    4b
  1289.         st    d3
  1290.         bra    4b
  1291. 4:
  1292.         tst.b    d3
  1293.         bne    5f
  1294. 4:
  1295.         move.b    (a1)+,d0
  1296.         beq    1b
  1297.         subq.l    #1,d2
  1298.         bmi    2b
  1299.         move.b    d0,(a0)+
  1300.         bra    4b
  1301. 5:
  1302.         moveq    #'"',d3
  1303.         cmp.b    d0,d3
  1304.         bne    7f
  1305.         moveq    #"'",d3
  1306. 7:
  1307.         move.b    d3,d0
  1308.         bra    6f
  1309. 5:
  1310.         move.b    (a1),d0
  1311.         beq    5f
  1312.         cmp.b    d3,d0
  1313.         beq    5f
  1314.  
  1315.         addq.l    #1,a1
  1316. 6:
  1317.         subq.l    #1,d2
  1318.         bmi    2b
  1319.  
  1320.         move.b    d0,(a0)+
  1321.         bra    5b
  1322. 5:
  1323.         subq.l    #1,d2
  1324.         bmi    2b
  1325.  
  1326.         move.b    d3,(a0)+
  1327.         bra    3b
  1328.  
  1329. SetHUPAIR:
  1330.         PUSH    d2/a2
  1331.         tst.l    d0
  1332.         bmi    4f
  1333.  
  1334.         sub.l    d0,d1
  1335.         beq    1f
  1336.  
  1337.         move.l    d1,d2
  1338.         subq.l    #1,d2
  1339.         moveq    #0,d1
  1340.         subq.b    #1,d1
  1341.         bhi    3f
  1342.         bra    2f
  1343. 1:
  1344.         subq.l    #1,d0
  1345.         bmi    4f
  1346.  
  1347.         lea    (1,a1),a0
  1348.         moveq    #0,d2
  1349. 2:
  1350.         move.l    d2,d1
  1351. 3:
  1352.         move.b    d1,(a1)
  1353.  
  1354.         subq.l    #1,d0
  1355.         bmi    4f
  1356.  
  1357.         clr.b    (a0)+
  1358. 3:
  1359.         subq.l    #1,d0
  1360.         bmi    4f
  1361.  
  1362.         move.b    (a2)+,(a0)+
  1363.         bne    3b
  1364.  
  1365.         subq.l    #8,a1
  1366.         lea    (hupair_mark,pc),a2
  1367. 3:        move.b    (a2)+,(a1)+
  1368.         bne    3b
  1369.  
  1370.         move.l    d2,d0
  1371. 4:
  1372.         POP    d2/a2
  1373.         rts
  1374.  
  1375.  
  1376. * Data Section -------------------------------- *
  1377.  
  1378.         .data
  1379.         .even
  1380.  
  1381. title_mes:
  1382.         .dc.b    'Condrv.sys Manager '
  1383. version_mes:
  1384.         .dc.b    'XCONT version ',VERSION
  1385. version_mes_end:
  1386.         .dc.b    '  ',DATE,' ',AUTHOR,'.'
  1387. crlf:        .dc.b    CRLF,0
  1388.  
  1389. **usage_mes:
  1390. **        .dc.b    'option: on/off k/kon/koff push/pop check/ver'
  1391. **        .dc.b    ' -f/j<n> -l<file> -x<command> -z<p,s>/r',CRLF
  1392. usage_mes:
  1393.         .dc.b    'usage: ',PROGRAM,' [option] ...',CRLF
  1394.         .dc.b    'option:',CRLF
  1395.         .dc.b    '    on / off    ÄµéΦì₧é▌èJÄn / ÆΓÄ~',CRLF
  1396.         .dc.b    '    Å╚ù¬        ÄµéΦì₧é▌Å≤æ╘ò\Ī',CRLF
  1397.         .dc.b    '    xon / xoff    ÆΓÄ~âîâxâï++ / ÆΓÄ~âîâxâï--',CRLF
  1398.         .dc.b    '    x        ÆΓÄ~âîâxâïò\Ī',CRLF
  1399.         .dc.b    '    kon / koff    âLü[æÇì∞ïûë┬ / ï╓Ä~',CRLF
  1400.         .dc.b    '    k        âLü[Å≤æ╘ò\Ī',CRLF
  1401.         .dc.b    '    push / pop    Å≤æ╘æ▐ö≡ / ò£ïA',CRLF
  1402.         .dc.b    '    check / ver    ÅφÆôîƒì╕ / âoü[âWâçâôò\Ī',CRLF
  1403.         .dc.b    '    -f[num]        âVâXâeâÇâëâCâôò\Ī(0:ò\Ī [1]:ù}ɺ)',CRLF
  1404.         .dc.b    '    -j[num]        âRü[âhôⁿù═Ä₧é╠âyü[âXâgò╢ÄÜ(0:æSé─ [1]:16 ÉiÉöé╠é▌)',CRLF
  1405.         .dc.b    '    -l<file>    âtâ@âCâïĵéΦì₧é▌',CRLF
  1406.         .dc.b    '    -x<cmd> ...    ÄµéΦì₧é▌é≡ÆΓÄ~é╡é─âtâ@âCâïÄ└ìs',CRLF
  1407.         .dc.b    '    -z[p],[s]    ÅφÆô(p:ùDɵÅçê╩ s:âXâèü[âvÄ₧è╘)',CRLF
  1408.         .dc.b    '    -r        ÅφÆôë≡Å£',CRLF
  1409.         .dc.b    0
  1410.  
  1411. command_list:
  1412.         .dc.b    'on',0
  1413.         .dc.b    'off',0
  1414.         .dc.b    'x',0
  1415.         .dc.b    'xon',0
  1416.         .dc.b    'xoff',0
  1417.         .dc.b    'k',0
  1418.         .dc.b    'kon',0
  1419.         .dc.b    'koff',0
  1420.         .dc.b    'push',0
  1421.         .dc.b    'pop',0
  1422.         .dc.b    'check',0
  1423.         .dc.b    'ver',0
  1424.         .dc.b    0
  1425.  
  1426.         .even
  1427. stdin:        .dc.b    '-',0
  1428.         .even
  1429. ver_print_buf:    .dc.b    0,0
  1430. *        .dc.b    'e08b',CRLF
  1431. on_mes:        .dc.b    'on',CRLF,0
  1432. off_mes:    .dc.b    'off',CRLF,0
  1433.  
  1434. xcont_mes:    .dc.b    PROGRAM,':',0
  1435. xcon:        .dc.b    'xcon',0
  1436.  
  1437. thread_name:    .dc.b    'condrvd',0
  1438.  
  1439. condrv_err_mes:
  1440.         .dc.b    'condrv.sysé═ægé▌ì₧é▄éΩé─éóé▄é╣é±.',0
  1441. condrv_err_mes2:
  1442.         .dc.b    'condrv.sysé═ÅâÉ│òié┼é╖.',0
  1443.  
  1444. mem_err_mes:
  1445.         .dc.b    'âüâéâèé¬æ½éΦé▄é╣é±.',0
  1446.  
  1447. arg_err_mes:
  1448.         .dc.b    'ê°Éöé¬û│î°é┼é╖:',0
  1449. nofilename_err_mes:
  1450.         .dc.b    'âtâ@âCâïû╝é≡ÄwÆΦé╡é─ë║é│éó:',0
  1451. too_long_filename_mes:
  1452.         .dc.b    'âtâ@âCâïû╝é¬Æ╖é╖é¼é▄é╖:',0
  1453. load_err_mes:
  1454.         .dc.b    'âtâ@âCâïé¬âìü[âhÅoùêé▄é╣é±:',0
  1455.  
  1456. xcon_open_err_mes:
  1457.         .dc.b    'âLâââëâNâ^âfâoâCâXé¬âIü[âvâôé┼é½é▄é╣é±:',0
  1458.  
  1459. fopen_mes_tbl:    .dc.b    $fe,'âtâ@âCâïé¬éáéΦé▄é╣é±:',0
  1460.         .dc.b    $fd,'âfâBâîâNâgâèé¬éáéΦé▄é╣é±:',0
  1461.         .dc.b    $fc,'FCBé¬æ½éΦé▄é╣é±:',0
  1462.         .dc.b    $fb,'âfâBâîâNâgâè/â{âèâàü[âÇâëâxâïé═âIü[âvâôé┼é½é▄é╣é±:',0
  1463.         .dc.b    $f3,'âtâ@âCâïû╝é╠ÄwÆΦé╔îδéΦé¬éáéΦé▄é╖:',0
  1464.         .dc.b    $f1,'âhâëâCâuÄwÆΦé╔îδéΦé¬éáéΦé▄é╖:',0
  1465.         .dc.b    $df,'ÄwÆΦé╠âtâ@âCâïé═âìâbâNé│éΩé─éóé▄é╖:',0
  1466. fopen_err_mes:    .dc.b    $00,'âtâ@âCâïé¬âIü[âvâôé┼é½é▄é╣é±(é╗é╠æ╝é╠âGâëü[):',0
  1467. ioctrl_err_mes:
  1468.         .dc.b    'IOCTRLé╔Ä╕ösé╡é▄é╡é╜:',0
  1469.         .even
  1470. val_err_mes:               ****
  1471.         .dc.b    'ÉöÆlé¬æσé½é╖é¼é▄é╖:',0
  1472.         .even
  1473. cant_inp_err_mes:
  1474. cant_out_err_mes:     **
  1475.         .dc.b    'ôⁿù═òsë┬ö\é╚âtâ@âCâïé┼é╖:',0
  1476. fread_err_mes:
  1477.         .dc.b    'âtâ@âCâïé¬ô╟é▀é▄é╣é±:',0
  1478.  
  1479. push_err_mes:
  1480.         .dc.b    'é▒éΩê╚ÅπâXâ^âbâNé╔É╧é▀é▄é╣é±.',0
  1481. pop_err_mes:
  1482.         .dc.b    'âXâ^âbâNé═ï≤é┼é╖.',0
  1483.  
  1484. keep_mes:
  1485.         .dc.b    'ÅφÆôé╡é▄é╡é╜.',CRLF,0
  1486. already_keep_mes:
  1487.         .dc.b    'è∙é╔ÅφÆôé╡é─éóé▄é╖.',0
  1488. thread_full_mes:
  1489.         .dc.b    'é▒éΩê╚ÅπâoâbâNâOâëâEâôâhâvâìâZâXé≡ïNô«Åoùêé▄é╣é±.',0
  1490. proccess_err_mes:
  1491.         .dc.b    'CONFIG.SYSé╠PROCESSé¬É▌ÆΦé│éΩé─éóé▄é╣é±.',0
  1492.  
  1493. release_mes:
  1494.         .dc.b    'ÅφÆôë≡Å£é╡é▄é╡é╜.',CRLF,0
  1495. not_keep_mes:
  1496.         .dc.b    'é▄é╛ÅφÆôé╡é─éóé▄é╣é±.',0
  1497. release_err_mes:
  1498.         .dc.b    'ÅφÆôë≡Å£Åoùêé▄é╣é±é┼é╡é╜.',0
  1499.  
  1500.  
  1501. * Block Storage Section ----------------------- *
  1502.  
  1503.         .bss
  1504.         .even
  1505. buffer:
  1506. end_:
  1507.  
  1508.  
  1509.         .end
  1510.  
  1511. * End of File --------------------------------- *
  1512.  
  1513.